package com.adams.action;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;

import com.adams.action.view.ViewAction;
import com.adams.common.Constants;
import com.adams.encache.mechanism.CacheUtil;
import com.adams.utils.FileUtil;
import com.adams.utils.ImageUtil;

public class DcxtBaseAction extends ViewAction {
    private String tableCode;

    public String getTableCode() {
        return tableCode;
    }

    public void setTableCode(String tableCode) {
        this.tableCode = tableCode;
    }

    /**
     * 
     * Description :上传图片,并且生成缩略图
     * 
     * @param file
     *            上传的文件
     * @param fileName
     *            上传的文件名
     * @param ContentType
     *            上传的文件类型
     * @param proportion
     *            上否需要等比例缩放。<br>
     *            若true 当图片要压缩的大小比例不等于图片的比例，则会截取图片，<br>
     *            若false,当比例不等时也强制压缩成给定像素大小的图片
     * @param property
     *            设置的属性
     * @param pixel
     *            像素 像素数组为空则直接拷贝原图
     * @param fileTag
     *            图片名中包含的tag
     * @param inputMaps
     *            需多次上传时使用
     * @param bussiness
     *            当前业务路径文件件如：/dcxt
     * @return Map inputMap
     * @throws Exception
     * 
     */
    public Map uploadPicAndCutImage(File file, String fileName, String contentType, boolean proportion,
            String property, int[] piexl, String bussiness, String fileTag, Map... inputMaps) throws Exception {
        Map inputMap;
        if (inputMaps.length > 0) {
            inputMap = inputMaps[0];
        } else {
            inputMap = ViewAction.requestParameterMap2Map(request);
        }

        File source = null;// 图片文件
        String sourceFileName = "";
        String sourceContentType = "";
        String targetFilePath = "";
        if (file != null)
            source = file;
        if (fileName != null && !"".equals(fileName))
            sourceFileName = fileName;
        if (contentType != null && !"".equals(contentType))
            sourceContentType = contentType;

        if (source != null) {

            if (sourceContentType.startsWith("image") == false) {
                throw new Exception("请上传图片资源!");
            } else if (source.length() == 0 || source.length() > Integer.parseInt(Constants.picSize)) {

                throw new Exception("图片文件大小必须大于0KB且小于" + Integer.parseInt(Constants.picSize) / 1024 + "KB!");
            } else {

                sourceFileName = "dcxt_" + fileTag
                        + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString()
                        + sourceFileName.substring(sourceFileName.lastIndexOf("."));

                targetFilePath = Constants.adDir + bussiness + "/" + sourceFileName;// 物理路径
                File targetFile = new File(targetFilePath);
                if (targetFile.exists()) {
                    throw new Exception("该文件已存在!");
                }
                FileUtil.createPhotoPath(Constants.adDir + bussiness);
                int[] temp;
                if (piexl.length >= 2) {
                    temp = piexl;
                    ImageUtil.saveAndCutImage(source, targetFile, temp[0], temp[1], proportion);
                } else {
                    FileUtil.copy(source, targetFile);
                    temp = new int[] {};
                }

                String targetFileUrl = "";

                if (Constants.adUrl.indexOf("/") == 0) {
                    targetFileUrl = Constants.adUrl + bussiness + "/" + sourceFileName;// 虚拟路径
                } else {
                    targetFileUrl = "/" + Constants.adUrl + bussiness + "/" + sourceFileName;// 虚拟路径
                }

                inputMap.put(property, targetFileUrl);
            }

        }
        return inputMap;
    }

    /**
     * 刷新页面
     * 
     * @return
     */
    public String clearTableCache() {
        Map map = new HashMap();
        if (StringUtils.isNotBlank(tableCode)) {
            CacheUtil.clearCacheByTablecode(tableCode);
            map.put("msg", "刷新成功");
            map.put("success", true);
        } else {
            map.put("msg", "失败");
            map.put("success", false);
        }
        write(JSONObject.fromObject(map).toString());
        return null;
    }

}
